﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace THenu.TinyHourseLib.DesignPattern.Specification_Pattern.Example
{
    /// <summary>
    /// 为最好的 MyGirl 2014-06-12 15:45:41
    /// </summary>
    public class BeautyGirl
    {
        public static void WhoIsZhengBingBing()
        {
            // 首先俺家冰冰肯定是善良的
            ISpecification<MyGirl> zbb = new ExpressionBuilder<MyGirl>(p => p.Style.Contains(HoneyStyle.善良));
            // 其实吧，喜欢一个人的时候是不是就看到她就觉得开心，忍不住想笑，觉得她做什么都好笨，想为她每一件事
            ISpecification<MyGirl> honey = new ExpressionBuilder<MyGirl>(p => p.Style.Contains(HoneyStyle.可爱笨笨));
            zbb.And(honey);
            // 虽然爱屋及乌已经到不觉得你胖的地步了，但是看到你那么努力的减肥，到120就够了，太瘦就跟你不协调了o(∩_∩)o 哈哈
            ISpecification<MyGirl> best = new PremiumGril<MyGirl>(160, 120);
            zbb.And(best);
            // 最后冰冰说她自己是个女汉子,我觉得吧还挺好的 嘎嘎
            ISpecification<MyGirl> biWoman = new ExpressionBuilder<MyGirl>(p => p.Impression== Impression.女汉子);
            zbb.And(biWoman);
           
            // 路人都说傻孩子都老大不小了，不能孩子气了,应该爱上一个知道温暖体贴你的女孩
            ISpecification<MyGirl> moreGirl = new ExpressionBuilder<MyGirl>(p => p.Style.Contains(HoneyStyle.温暖体贴));
            // 虽然他们说的那些女孩身高外貌都不输给你
            moreGirl.And(best);
            // 或许她们还比你聪明
            ISpecification<MyGirl> smart = new ExpressionBuilder<MyGirl>(p => p.Style.Contains(HoneyStyle.聪明));
            moreGirl.And(smart);
            // 而且她们在大家眼中是人人喜爱的软妹子
            ISpecification<MyGirl> honeyfish = new ExpressionBuilder<MyGirl>(p => p.Impression == Impression.软妹子);
            moreGirl.And(honeyfish);
            // 按照他们的说法,承诺为我介绍一大堆的这样的美女来着
            MyGirl prettyGril = new MyGirl() { Impression = Impression.软妹子, Height = 160, Weight=110, 
                Style = new List<HoneyStyle>() { HoneyStyle.温暖体贴, HoneyStyle.聪明 } }; 

            // 可是她们始终不是你
            if (!zbb.IsSatisfiedBy(prettyGril))
            {
                MyGirl loveYou = new MyGirl() { Description = "因为你先到,所以我再也容不下其它！..." };
                Console.WriteLine(loveYou.Description);
            }

        }
    }
}
